import { defineStore } from 'pinia';
import { getUserInfo, login } from '@/api/user';
import { getAccessToken, removeAccessToken, setAccessToken } from '@/utils/accessToken';
import { setting } from '@/config/setting';
import { resetRouter } from '@/router';
import { ElMessage, ElNotification } from 'element-plus';

const { title, tokenName } = setting;

export const useUserStore = defineStore('user', {
  state: () => ({
    accessToken: getAccessToken(),
    username: '',
    avatar: '',
    permissions: [],
  }),
  actions: {
    async login(userInfo) {
      try {
        const { data } = await login(userInfo);
        const accessToken = data[tokenName];
        if (accessToken) {
          this.accessToken = accessToken; // 使用 this 更新状态
          setAccessToken(accessToken);
        } else {
          ElMessage.error(`登录接口异常，未正确返回${tokenName}...`);
        }
      } catch (error) {
        console.error('Login Error:', error);
        ElMessage.error('登录失败，请稍后再试...');
      }
    },

    async getUserInfo() {
      try {
        const { data } = await getUserInfo(this.accessToken); // 使用 this 访问状态
        if (!data) {
          ElMessage.error('验证失败，请重新登录...');
          return false;
        }

        const { permissions, username, avatar } = data;
        if (permissions && username && Array.isArray(permissions)) {
          this.permissions = permissions; // 使用 this 更新状态
          this.username = username;
          this.avatar = avatar;
          return permissions;
        } else {
          ElMessage.error('用户信息接口异常');
          return false;
        }
      } catch (error) {
        console.error('Get User Info Error:', error);
        ElMessage.error('获取用户信息失败，请稍后再试...');
        return false;
      }
    },

    async logout() {
      try {
        // await logout(this.accessToken); // 如果有登出接口，可以调用
        this.resetAccessToken(); // 调用重置方法
        await resetRouter(); // 重置路由
      } catch (error) {
        console.error('Logout Error:', error);
        ElMessage.error('退出登录失败，请稍后再试...');
      }
    },

    resetAccessToken() {
      this.permissions = []; // 清空权限
      this.accessToken = ''; // 清空令牌
      removeAccessToken(); // 移除本地存储的令牌
    },
  },
});